package com.wy.tingshu.servlet.tarck;

import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wy.tingshu.service.TrackService;
import com.wy.tingshu.util.Log;
import com.wy.tingshu.view_object.StudioTrackView;
import com.wy.tingshu.view_object.UserVO;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;


@WebServlet("/studio/track/list.json")
public class ListJsonServlet extends HttpServlet {
    private final TrackService trackService=new TrackService();
    private final ObjectMapper objectMapper=new ObjectMapper();


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Log.println("访问GET/studio/track/list.json");
        Log.println("QueryString:"+req.getQueryString());
        //查询page信息（分页信息的读取）——默认规定page=1就是第一页
            //读取当前访问页面需要考虑一些边界情况（没有传，不是数字）
            //为了简单处理，就不做错误提示了，而是把异常值变为相对合理的合法值了
        int page;
        String pageString=req.getParameter("page");
        if(pageString==null||pageString.trim().isEmpty()){
            Log.println("请求参数中没有携带页码信息，默认成第一页");
            page=1;
        }else {
            pageString=pageString.trim();//.trim():去除两侧空白字符串
            try{
                page=Integer.parseInt(pageString);
            }catch (NumberFormatException exc){
                Log.println("请求参数中的页码信息不是数字，默认成第一页");
                page=1;
            }
        }
        Log.println("请求页数是第"+page+"页");


        //1.获取当前登录用户
        HttpSession session = req.getSession(false);
        UserVO currentUser=null;
        if(session!=null){
            currentUser=(UserVO)session.getAttribute("currentUser");
        }
        //2.用户未登录，else用户已登录
        StudioTrackView resultView;
        if(currentUser==null){
            Log.println("用户未登录");
            resultView=new StudioTrackView();
            resultView.currentUser=null;//这步可以不写，因为默认值就是null
            resultView.trackList=null;//这步可以不写，因为默认值就是null
        }else {//用户已登录
            Log.println("用户已登录："+currentUser);
            resultView=trackService.listOfUser(currentUser,page);//通过查找当前用户找tid,title（resultTrackView.trackList）,分页信息(resulTrackView.paginationView)

        }
        Log.println("准备序列化的对象是："+resultView);
        //使用Jackson提供代码，将list对象转化成JSON格式的字符串类型（序列化）
        String json=objectMapper.writeValueAsString(resultView);
        Log.println("JSON序列化后的结果是："+json);
        //响应该字符串
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/json");
        PrintWriter writer= resp.getWriter();
        Log.println("将JSON写入响应体中");
        writer.println(json);


    }
}
